! boot.s程序
! 首先利用BIOS中断把内核代码（head代码）加载到内存0x10000(64k)处，然后移动到内存0处。
! 最后进入保护模式，并跳转到内存0（head代码）处继续运行

BOOTSEG = 0x07c0 ! 引导扇区（本程序）被BIOS加载到内存0x7c00处
SYSSEG = 0x1000 ! 内核（head）先加载到0x10000处，然后移动到0x0处。
SYSLEN = 17

entry start
start:
	jmpi go, #BOOTSEG
go: mov ax, cs
	mov ds, ax
	mov es, ax
	mov ss, ax
	mov sp, #0x400 ! 设置临时栈指针，其值需大于程序末端并有一定空间即可

load_system:
	mov dx, #0x0000 ! 利用BIOS中断 int 0x13 功能2 从启动盘读取head代码。
	mov cx, #0x0002 ! DH - 磁头号；DL - 驱动器号， CH - 10位磁道号低8位
	mov ax, #SYSSEG ! CL - 位7,6是磁道号高2位，位5~0起始扇区号（从1计）
	mov es, ax ! es:bx - 读入缓冲区位置（0x1000:0x0000）
	xor bx, bx
	mov ax, #0x200 + SYSLEN
	int 0x13
	jnc ok_load ! CF=0时跳转
die: jmp die

ok_load:
	cli
	mov ax, #SYSSEG
	mov ds, ax
	xor ax, ax
	mov es, ax
	mov cx, #0x1000
	sub si, si
	sub di, di
	rep movw

	mov ax, #BOOTSEG
	mov ds, ax
	lidt idt_48
	lgdt gdt_48

	mov ax, #0x0001
	lmsw ax
	jmpi 0, 8
gdt: .word 0, 0, 0, 0
	.word 0x07FF
	.word 0x0000
	.word 0x9A00
	.word 0x00C0

	.word 0x07FF
	.word 0x0000
	.word 0x9200
	.word 0x00C0

idt_48: .word 0
	.word 0, 0

gdt_48: .word 0x7ff
	.word 0x07c00 + gdt, 0

.org 510
	.word 0xAA55


